Computer application architectures have trended towards distributing different computing functions across multiple computers. Indeed, a majority of modern mobile and web applications are based on a distributed architecture. For example, in a client-server architecture, the split of application functionality between the front end and the backend helps reuse backend computing resources across several clients. It also creates a trust boundary between the client and the server, which enables servers to authorize access to protect data or functionality. In a typical client-server application, the client submits data for processing after authenticating itself to the backend, and the backend responds after processing of the client request using protected resources.
A typical cloud backend of an application (e.g., mobile or web) provides raw computing resources (e.g., CPU, memory, disk, network, etc.,) as well as the operating system and application framework capabilities that are different from that of the client. The backend encapsulates server code that implements part of the application logic as well as secrets this code requires to access protected data or functionality, such as database connection strings, application program interfaces (API), security keys, etc.
Managing an infrastructure that hosts backend code may involve sizing, provisioning, and scaling various servers, managing operating system updates, dealing with security issues, updating hardware as needed, and then monitoring all these elements for possible malfunctions. Thus, much effort is typically spent just on the logistics of managing the backend. This effort may be better spent in developing, optimizing and/or deploying computer applications.
Over the years, cloud computing has increased in popularity because it reduces Information Technology (IT) costs, and makes server computing capability available as a commodity/utility. Previously, the main approach to reduce costs was to lower the IT staff by outsourcing server computing functions to cloud computing vendors. However, presently there are several competing cloud computing vendors, so cost reductions are now primarily technical in nature.
One technical approach to reduce costs, is to increase application density. Specifically, hosting an application has resource costs such as memory and CPU. If there is a way to share those resource costs across applications, then those resource costs can be spread over those applications. Accordingly, multi-tenancy techniques have arisen to share virtual machine resources, thereby increasing application density.
The cost to provision and allocate a physical machine is greater than the cost to provision and allocate a virtual machine. In turn, the cost to provision and allocate a virtual machine is greater than the cost to provision and allocate a multi-tenant container. Finally, the cost to execute a process in a containers in turn is more expensive than the cost to execute a thread. Ideally, for a class of lightweight web applications, application density could be maximized but running each application on a per thread basis. However, while operating systems allow processes to manage resources, they do not provide adequate functionality to manage resources at the thread level. Specifically, information assets of different tenants should be isolated from each other, such as in a multi-tenant container, and resource use should be managed and metered to maintain quality of service and allow for billing by the cloud computing vendor.
While platform as a service (PaaS) solutions that allow customers to develop, run, and manage Web applications without the complexity of building and maintaining the infrastructure typically associated with developing and launching an app exist, they come with various concerns. For example, known PaaS platforms may not provide an attractive cost structure and may run on an asynchronous programming model, requiring polling for the results of the computation, which adversely affects latency. Further, known PaaS architectures may require the code not only to be uploaded but also persistently stored. The code then waits for events in order to complete its task. However, such approach includes security risks in that the code is managed elsewhere, making it vulnerable to copying or being hacked. It is with respect to these considerations and others that the present disclosure has been written.